﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;


namespace StudySerialization
{
    [Serializable]
    public class App:IDeserializationCallback
    {
        [NonSerialized]
        public int id;
        public string name;
        public enum Gender
        {
            Work, 
            Game, 
            Book
        } ;

        // Usiamo l'attributo Flags, che tramite le potenze di 2, possiamo
        // attivare piu' valori per ogni campo, esempio Iphone+Ipad
        [Flags]
        public enum Dispositivi
        {
            None =      0x0,
            iPhone =    0x1,
            iPad =      0x2,
            iPad2 =     0x4,
            iPod =      0x8,
            iMac =      0x16
        }

        public Dispositivi dispositivi;


        [OptionalField]
        public string author;

        public Gender cathegory;

        // Constructor senza argomenti
        public App()
        {
        }

        // Constructor con argomenti
        public App(int pId, string pName, Gender pGender, string pAuthor)

        {
            this.id = pId;
            this.name = pName;
            this.cathegory = pGender;
            this.author = pAuthor;

        }

        // Override del tostring
        public override string ToString()
        {
            return "Id: " + id + " Name: " + name + " Cathegory: " + cathegory + " Author: " + author;

        }

        /// <summary>
        /// Valori di default usati dopo la deserializzazione in caso di
        /// campi non serializzabili, vale per BinaryFormatter, non viene usato nel serializzatore xml
        /// </summary>
        /// <param name="sender"></param>
        public void OnDeserialization(object sender)
        {
            this.name += " -deser";
            this.id = 999;

        }

 


    }
}
